#include "mysql.h"

mysql::mysql()
{

}

mysql::~mysql()
{
	mysqlClose();
}

void mysql::mysqlClose()
{
	if(data_base.isOpen())
		data_base.close();
}

bool mysql::mysqlInit(QString ip, QString port, QString database)
{
	//打开MySQL
    data_base = QSqlDatabase::addDatabase("QMYSQL");
	data_base.setHostName(ip);  //设置主机地址
	data_base.setPort(port.toInt());  //设置端口
	data_base.setDatabaseName(database);  //设置数据库名称
	data_base.setUserName("PLDT");  //设置用户名
	data_base.setPassword("PLDT@sw");  //设置密码
	if(!data_base.open())
	{
		//qDebug()<<"failed to connect to mysql";
		return false;
	}
	else
	{
		//qDebug()<<"success";
		return true;
	}
}

quint32 mysql::mysqlChangeTable(QString table)
{
	currentTable.clear();
	currentTable.append(table);
	return mysqlSystemCheck();
}

bool mysql::mysqlGetOneData()
{
	QSqlQuery query;
	QString gettemp;

	if(!data_base.open())
	{
		return false;
	}

    gettemp.clear();
    gettemp.append("lock TABLES "+currentTable+" write ;");
    query.exec(gettemp);
    qDebug() << "gettemp1 :" << gettemp;
    gettemp.clear();
    gettemp.append("update ");
    gettemp.append(currentTable);
    gettemp.append(" set isused = '1'");
    gettemp.append("WHERE ISUSED = '0'");
    gettemp.append(" ");
    gettemp.append("ORDER BY DEVID ASC LIMIT 1");
    query.exec(gettemp);
    qDebug()<<"gettemp2 :" <<gettemp ;
    gettemp.clear();
    gettemp.append("select * from ");
    gettemp.append(currentTable);
    gettemp.append(" where ISUSED = 1 ORDER BY DEVID DESC LIMIT 1");
    qDebug()<<"gettemp3 :" <<gettemp ;
    if(query.exec(gettemp))
    {

        if(query.next())
        {
            current_DEVID = query.value(0).toString();
            qDebug()<< gettemp ;
        }
        else
        {
            gettemp.clear();
            gettemp.append("unlock TABLES");
            query.exec(gettemp);
            qDebug()<<"gettemp4 :" <<gettemp ;
            qDebug()<< "数据已经用完" ;
            return false ;
        }
    }
    else
    {
        gettemp.clear();
        gettemp.append("unlock TABLES");
        query.exec(gettemp);
        qDebug()<<"gettemp5 :" <<gettemp ;
        qDebug()<< "检查网络是否正常！";
        return false ;
    }
    gettemp.clear();
    gettemp.append("unlock TABLES");
    query.exec(gettemp);
    return true ;
}

bool mysql::checkIsWrite(QString cusid)
{
	QSqlQuery query;
	QString gettemp;

	if(!data_base.open())
	{
		return false;
	}

	gettemp.clear();
	gettemp.append("SELECT ");
	gettemp.append("* FROM ");
	gettemp.append(currentTable);
	gettemp.append(" ");
	gettemp.append("WHERE CUSID = ");
	gettemp.append("\"");
	gettemp.append(cusid);
	gettemp.append("\"");
	gettemp.append(" ");
	gettemp.append("ORDER BY DEVID ASC LIMIT 1");
	//qDebug()<<gettemp;
	if(query.exec(gettemp))
	{
		if(query.next())
		{
			cusid = query.value(1).toString();
			return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return false;
    }
}

bool mysql::checkAllflagIsTrue(QString snInfo)
{
    QSqlQuery query;
    QString gettemp;

    if(!data_base.open())
    {
        return false;
    }

    gettemp.clear();
    gettemp.append("SELECT * FROM  vLock4_cit_20170831_module WHERE SN = ");
    gettemp.append(snInfo);
    qDebug()<<gettemp;
    if(query.exec(gettemp))
    {
        if(query.next())
        {
            return query.value(1).toInt();
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

bool mysql::mysqlSetOneData(Device_Info *info)
{
	QSqlQuery query;
	QString gettemp;
	QDateTime current_date_time = QDateTime::currentDateTime();
    QString current_date = current_date_time.toString("yyyy-MM-dd hh:mm:ss");

	if(!data_base.open())
	{
		return false;
	}
	gettemp.clear();
	gettemp.append("UPDATE ");
	gettemp.append(currentTable);

	gettemp.append(" ");
	gettemp.append("SET CUSID=");
	gettemp.append("\"");
	gettemp.append(info->cusid);
	gettemp.append("\"");

	gettemp.append(",");
	gettemp.append("IMEI=");
	gettemp.append("\"");
	gettemp.append(info->imei);
	gettemp.append("\"");

	gettemp.append(",");
	gettemp.append("CC2541DOMAIN=");
	gettemp.append("\"");
	gettemp.append(info->cc_domain);
	gettemp.append("\"");

	gettemp.append(",");
	gettemp.append("900DOMAIN=");
	gettemp.append("\"");
	gettemp.append(info->fly900_domain);
	gettemp.append("\"");

	gettemp.append(",");
	gettemp.append("BLUETOOTH=");
	gettemp.append("\"");
	gettemp.append(info->BT_MAC);
	gettemp.append("\"");

	gettemp.append(",");
	gettemp.append("900VERSION = ");
	gettemp.append("\"");
	gettemp.append(info->fly900_version);
	gettemp.append("\"");

	gettemp.append(",");
	gettemp.append("CC2541VERSION=");
	gettemp.append("\"");
	gettemp.append(info->cc_version);
	gettemp.append("\"");

	gettemp.append(",");
    gettemp.append("DATE=");
	gettemp.append("\"");
	gettemp.append(current_date);
	gettemp.append("\"");

	gettemp.append(",");
	gettemp.append("ISUSED = ");
	gettemp.append("\"");
	gettemp.append("1");
	gettemp.append("\"");

	gettemp.append(" WHERE DEVID=");
	gettemp.append("\"");
	gettemp.append(current_DEVID);
	gettemp.append("\"");

    qDebug()<<gettemp;

	current_DEVID.clear();

	if(query.exec(gettemp))
	{
		return true;
	}
	else
	{
		return false;
	}
}

quint32 mysql::mysqlSystemCheck()
{
	QSqlQuery query;
	QString gettemp;

	if(!data_base.open())
	{
		return false;
	}

	gettemp.clear();
	gettemp.append("SELECT ");
	gettemp.append("* FROM ");
	gettemp.append(currentTable);
	gettemp.append(" ");
	gettemp.append("WHERE ISUSED = '0'");
	gettemp.append(" ");
	gettemp.append("ORDER BY DEVID ASC");
	if(query.exec(gettemp))
	{
		return query.size();
	}
	else
	{
		return -1;
	}
}

void mysql::mysqlSetusedzero(QString current_DEVID)
{
    QSqlQuery query ;
    qDebug()<< "UPDATE "+currentTable+" SET ISUSED=0 WHERE DEVID ="+current_DEVID;
    query.exec("UPDATE "+currentTable+" SET ISUSED=0 WHERE DEVID ="+current_DEVID);
}

int mysql::getTtlRcrdNmbr()
{
    QSqlQuery query;
    QString gettemp;

    if(!data_base.open())
    {
        return -1;
    }

    gettemp.clear();
    gettemp.append("SELECT * FROM ");
    gettemp.append(currentTable);
//    qDebug() << gettemp;
    if(query.exec(gettemp))
    {
       return query.size();
    }
    else
    {
        return -1;
    }
}

//int mysql::getVilblRcrdNmbr(QString table_name)
//{

//}
